﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace Auktionshus
{
    public partial class FrmLogin : Form
    {
        NetworkConnection networkConnection;
        KlientMonitor klientMonitor;
        Thread lytteTråd;


        public FrmLogin()
        {
            InitializeComponent();
        }

        private KlientMonitor.ModtagetBesked formThreadModtagBesked;

        private void FrmLogin_Load(object sender, EventArgs e)
        {
			try
			{
				networkConnection = new NetworkConnection();    //Klassen NetworkConnection laves her
			}
			catch (Exception)//Hvis der ikke kan oprettes forbindelse til serveren, kastes der en Exception fra NetworkConnection
			{
				MessageBox.Show("Der er ingen server i øjeblikket");
				this.Close();
			}
            
            klientMonitor = new KlientMonitor(networkConnection);   //Klassen KlientMonitor laves her

            formThreadModtagBesked = BeskedModtager;
            klientMonitor.ModtagetBeskedEvent += ExternBeskedModtager;
            
            lytteTråd = new Thread(klientMonitor.LytTilServer);     //her oprettes en tråd der skal bruges "lytte" efter kald fra serveren
            lytteTråd.IsBackground = true;
			lytteTråd.Start();  //En ny tråd startes her
        }

        private void btnLogInd_Click(object sender, EventArgs e)
        {
			if (txtBrugernavn.Text == "")
			{
				MessageBox.Show("Skriv venligst et brugeralias");
			}
			else
			{
				klientMonitor.SkrivTilServer(txtBrugernavn.Text);
			}
        }

        /// <summary>
        /// Modtager serverens svar om bruger navn er ok eller ej.
        /// </summary>
        /// <param name="besked"></param>
        public void BeskedModtager(string besked)
        {
			if (besked == "sandt")
			{
				FrmAuktionKlient auktionsform = new FrmAuktionKlient(networkConnection, klientMonitor, lytteTråd, txtBrugernavn.Text);  //En ny form startes op.
				klientMonitor.ModtagetBeskedEvent -= ExternBeskedModtager;  //den gamle form afmeldes Event da formen ikke længere skal bruges.
				auktionsform.Show();
				this.Hide();    //login formen skjules
			}
			else
			{
				MessageBox.Show("Brugernavnet var allerede taget. Prøv et andet.");
			}
        }

        /// <summary>
        /// Metode der bruger invoke så GUI komponenterne kan anvendes af lyttetråden.
        /// </summary>
        /// <param name="besked"></param>
        public void ExternBeskedModtager(string besked)
        {
            this.Invoke(formThreadModtagBesked, besked);
        }

    }
}
